<!DOCTYPE HTML>
<link rel="help" href="http://url.spec.whatwg.org/#dom-url-pathname">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>

test(function() {
    var url = new URL('http://www.domain.com/');
    assert_equals(url.pathname, '/');

    url = new URL('http://www.domain.com/a');
    assert_equals(url.pathname, '/a');

    url = new URL('http://www.domain.com');
    assert_equals(url.pathname, '/');

    url.pathname = 'a/b';
    assert_equals(url.pathname, '/a/b');

    url.pathname = '/a/b';
    assert_equals(url.pathname, '/a/b');

    url.pathname = 'a/b/';
    assert_equals(url.pathname, '/a/b/');

    url.pathname = '';
    assert_equals(url.pathname, '/');

    url.pathname = '/';
    assert_equals(url.pathname, '/');

    url = new URL('file:///home/abarth');
    assert_equals(url.pathname, '/home/abarth');
}, 'Basic pathname');

test(function() {
    var url = new URL('mailto:foo@bar.com');
    assert_equals(url.pathname, 'foo@bar.com');

    url.pathname = '/a/b';
    assert_equals(url.pathname, 'foo@bar.com');
}, 'non hierarchical');

test(function() {
    var url = new URL('http://abc.de:8080/path/file?query#fragment');
    var expected = '/path/file';
    assert_equals(url.pathname, expected);

    assert_throws_js(TypeError, () => { url.href = 'invalid'; });
    assert_equals(url.pathname, expected);

    url.pathname = '/new/path';
    assert_equals(url.pathname, '/new/path');
    assert_equals(url.href, 'http://abc.de:8080/new/path?query#fragment');
}, 'pathname property invalid URL');

test(function() {
    var url = new URL('http://www.domain.com/');
    assert_equals(url.pathname, '/');

    url.pathname = '\udc01\ud802a';
    assert_equals(url.pathname, '/' + encodeURIComponent('\ufffd\ufffda'));
}, 'pathname with unmatched surrogates');

</script>
